﻿#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>



#include <windows.h>
//VS2022 WIN11环境测试
int main()
{
	FILE* pf = fopen("test.txt", "w");
	fputs("abcdef", pf);//先将代码放在输出缓冲区
	printf("睡眠10秒-已经写数据了，打开test.txt⽂件，发现⽂件没有内容\n");
	Sleep(10000);
	printf("刷新缓冲区\n");
	fflush(pf);//刷新缓冲区时，才将输出缓冲区的数据写到⽂件（磁盘）
	//注：fflush 在⾼版本的VS上不能使⽤了
	printf("再睡眠10秒-此时，再次打开test.txt⽂件，⽂件有内容了\n");
	Sleep(10000);
	fclose(pf);
	//注：fclose在关闭⽂件的时候，也会刷新缓冲区
	pf = NULL;
	return 0;
}


//enum { SIZE = 5 };
//
//int main()
//{
//	double a[SIZE] = { 1.,2.,3.,4.,5. };
//	FILE* fp = fopen("test.bin", "wb"); // 必须⽤⼆进制模式
//	fwrite(a, sizeof * a, SIZE, fp); // 写 double 的数组
//	fclose(fp);
//	double b[SIZE];
//	fp = fopen("test.bin", "rb");
//	size_t ret_code = fread(b, sizeof * b, SIZE, fp); // 读 double 的数组
//	if (ret_code == SIZE)
//	{
//		puts("Array read successfully, contents: ");
//		for (int n = 0; n < SIZE; ++n)
//			printf("%f ", b[n]);
//		putchar('\n');
//	}
//	else 
//	{ // error handling
//		if (feof(fp))
//			printf("Error reading test.bin: unexpected end of file\n");
//		else if (ferror(fp)) {
//			perror("Error reading test.bin");
//		}
//	}
//	fclose(fp);
//}

//int main(void)
//{
//	int c; // 注意：int，⾮char，要求处理EOF
//	FILE* fp = fopen("test.txt", "r");
//	if (!fp) 
//	{
//		perror("File opening failed");
//		return 1;
//	}
//	//fgetc 当读取失败的时候或者遇到⽂件结束的时候，都会返回EOF
//	while ((c = fgetc(fp)) != EOF) // 标准C I/O读取⽂件循环
//	{
//		putchar(c);
//	}
//	//判断是什么原因结束的
//	if (ferror(fp))
//		puts("I/O error when reading");
//	else if (feof(fp))
//		puts("End of file reached successfully");
//	fclose(fp);
//}

//int main()
//{
//	printf("%zd\n", sizeof(short));
//	return 0;
//}


//int main()
//{
//	
//	FILE* pf = fopen("example.txt", "wb");
//	fputs("This is an apple.", pf);
//	fseek(pf, 9, SEEK_SET);
//	fputs(" sam", pf);
//	fclose(pf);
//
//	char arr[30] = { 0 };
//	pf = fopen("example.txt", "rb");
//	fgets(arr, 30, pf);
//	printf("%s", arr);
//	return 0;
//}

//int main()
//{
//	FILE* pf = fopen("example.txt", "wb");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//	fputs("This is an apple.", pf);
//	fseek(pf, 9, SEEK_SET);
//	fputs(" sam", pf);
//	fputs(stdout, pf);
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}

//struct S
//{
//	int a;
//	float f;
//	char str[10];
//};
//
//int main()
//{
//	char arr[20] = { 0 };
//	struct S s = { 100, 3.14f, "hehe" };
//	struct S tmp = { 0 };
//	//将格式化的数据转换为字符串
//	sprintf(arr, "%d %f %s", s.a, s.f, s.str);
//	//printf("%s", arr);
//	sscanf(arr, "%d %f %s", &(tmp.a), &(tmp.f), tmp.str);
//
//	printf("%d %f %s", tmp.a, tmp.f, tmp.str);
//	return 0;
//}

//struct Stu
//{
//	int a;
//	float f;
//};
//
//int main()
//{
//	FILE* pf = fopen("data.txt", "w");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//	struct Stu s = { s.a = 100, s.f = 3.14f };
//	fprintf(pf, "%d %f", s.a, s.f);
//	fclose(pf);
//
//	pf = fopen("data.txt", "r");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//	fscanf(pf, "%d %f", &(s.a), &(s.f));
//	printf("%d %f", s.a, s.f);
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}

//int main()
//{
//	FILE* pf = fopen("data.txt", "w");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//	fputs("hello world", pf);
//	fclose(pf);
//	
//	pf = fopen("data.txt", "r");
//	char arr[13] = { 0 };
//	fgets(arr, 13, pf);
//	printf("%s", arr);
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}

//int main()
//{
//	FILE* pf = fopen("data.txt", "w");
//	for (int i = 0; i < 26; i++)
//	{
//		fputc('a' + i, pf);
//	}
//	fclose(pf);
//
//	pf = fopen("data.txt", "r");
//	int ch = fgetc(pf);
//	while (!feof(pf))
//	{
//		putchar(ch);
//		ch = fgetc(pf);
//	}
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}

//int main()
//{
//	FILE* pFile;
//	pFile = fopen("example.txt", "wb");
//	fputs("This is an apple.", pFile);
//	fseek(pFile, 9, SEEK_SET);
//	fputs(" sam", pFile);
//	fclose(pFile);
//
//	char arr[30] = { 0 };
//	pFile = fopen("example.txt", "rb");
//	fgets(arr, 30, pFile);
//	printf("%s", arr);
//	fclose(pFile);
//	return 0;
//}